package com.example.domain.dto.product;

import com.example.domain.dto.MoneyDTO;
import com.example.domain.entity.Product;
import com.example.domain.entity.enums.ProductStatus;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 商品列表项DTO
 * 用于商品列表查询的响应（简化版）
 * 
 * @author Means
 * @since 2025-10-27
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ProductListItemDTO {
    
    /**
     * 商品ID
     */
    private String id;
    
    /**
     * 商品名称
     */
    private String name;
    
    /**
     * 商品分类
     */
    private String category;
    
    /**
     * 商品状态
     */
    private ProductStatus status;
    
    /**
     * 商品描述（仅在详情查询时填充）
     */
    private String description;
    
    /**
     * 商品状态描述
     */
    private String statusDesc;
    
    /**
     * 原价（从当前生效的价目表获取的基准价格）
     */
    private MoneyDTO originalPrice;
    
    /**
     * 当前价格（应用折扣后的实际销售价格）
     */
    private MoneyDTO currentPrice;
    
    /**
     * 销售单位（从价目表条目获取）
     */
    private String unit;

    /**
     * 销售单位名称（用于前端显示）
     */
    private String unitName;
    
    /**
     * 是否有折扣
     */
    private Boolean hasDiscount;
    
    /**
     * 折扣描述（如"买3送1"、"满100减20"）
     */
    private String discountDesc;
    
    /**
     * 从实体类创建DTO（基础版本，不包含价格和折扣信息）
     * 
     * @param product 商品实体
     * @return ProductListItemDTO
     */
    public static ProductListItemDTO from(Product product) {
        if (product == null) {
            return null;
        }
        
        return ProductListItemDTO.builder()
                .id(product.getId())
                .name(product.getName())
                .category(product.getCategory())
                .status(product.getStatus())
                .statusDesc(getStatusDescription(product.getStatus()))
                .build();
    }
    
    /**
     * 从实体类创建DTO（详情版本，包含描述）
     * 
     * @param product 商品实体
     * @return ProductListItemDTO（包含描述）
     */
    public static ProductListItemDTO fromWithDescription(Product product) {
        if (product == null) {
            return null;
        }
        
        return ProductListItemDTO.builder()
                .id(product.getId())
                .name(product.getName())
                .category(product.getCategory())
                .description(product.getDescription())
                .status(product.getStatus())
                .statusDesc(getStatusDescription(product.getStatus()))
                .build();
    }
    
    /**
     * 获取状态描述
     * 
     * @param status 商品状态
     * @return 状态描述
     */
    private static String getStatusDescription(ProductStatus status) {
        if (status == null) {
            return null;
        }
        switch (status) {
            case ACTIVE:
                return "已上架";
            case INACTIVE:
                return "已下架";
            default:
                return status.name();
        }
    }
}

